#include <iostream>
using namespace std;

int _res=0;
const int& add(const int& op1, const int& op2, int& res){
	res=op1+op2;
	return res;
} 

int& add1(const int& op1, const int& op2, int& res=_res){
	res=op1+op2;
	return res;
}

int add2(const int& op1, const int& op2, int& res=_res){
	res=op1+op2;
	return res;
}
int main () {
		int op1=3;
		cout << add(op1,op1,op1)<< endl;
		cout << op1 << endl;
		const int& op2=add(op1,op1,op1); 
		const int op3=add(op1,op1,op1); 
		int op4=add(op1,op1,op1); 
		// int& op2=add(op1,op1,op1); // error: invalid initialization of 
								   // reference of type ‘int&’ from 
								   // expression of type ‘const int’
		cout << op1 << op2 << op4 << endl;
		add1(op1,op2,op4)=2;
		cout << op1 << op2 << op4 << endl;
		// add2(op1,op3,op1)=5;  // int is not lvalue
		cout << op2 << endl;
		cout << op1 << endl;

		add2(op1,op2);
		cout << _res << endl;
add1(op1,op2);
		cout << _res << endl;
		const int i5=5;
		// int & ri5=i5;
		// ri5=4;// const int -x- int&
		const int i6=i5;
		return 0;
}

// const int -x- int&
